# 创建一个类
class Student:
    # 直接写在类里的变量，称为类属性
    province_name = '江西'

    #
    def __init__(self, name, age):
        # self.name 称为实例属性，进行一个赋值的操作，将局部变量的name的赋值给实例变量
        self.name = name
        self.age = age

    # 实例方法
    def eat(self):
        print('水獭在嗦粉')

    # 静态方法
    # 使用静态方法，括号中不允许写self
    @staticmethod
    def method():
        print('使用了staticmethod进行了修饰，所以是静态方法')

    # 类方法
    @classmethod
    def cm(cls):
        print('因为使用了calassmethod进行了修饰，所以是静态方法')

# 在类中定义的称为方法，在类外定义的称为函数


# 创建 Student 类对象
stu1 = Student('阿瑾', 22)
# 调用实例类方法
stu1.eat()
# 也可以这样调
print(stu1.name)
print(stu1.age)

# 此代码与 stu1.eat() 功能相同
# 都是调用 Student 中的方法
# 类名.方法名 --> 实际上就是方法定义处的 self
Student.eat(stu1)


# 类属性的使用
stu1 = Student('阿瑾', 24)
stu2 = Student('阿洛', 27)
# stu1/stu2 都是调用了 Student 的整个类，共享其中的一切方法、属性等的实例对象
print(stu1.province_name)
print(stu2.province_name)
# 修改 Student 中的 province_name 则 stu1/stu2 都会发生变化
Student.province_name = '武汉'
print('-------修改后↓--------')
print(stu1.province_name)
print(stu2.province_name)

# 类方法的使用方式
# 使用类名直接调用
Student.cm()

# 静态方法
# 使用类名直接调用
Student.method()
